package pl.edu.pk.psb.bc.assembler;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import pl.edu.pk.psb.bc.ds.MiejsceDs;
import pl.edu.pk.psb.bc.dto.MiejsceDto;
import pl.edu.pk.psb.bc.dto.SalaDto;
import pl.edu.pk.psb.bc.util.Miejsce;

@Component
public class SalaAssembler {
	
	@Autowired
	MiejsceAssembler miejsceAssembler;
	/**
	 * Zamienia sale na zbior miejsc DS
	 * 
	 * @param sala
	 *            Sala DTO
	 * @return Zbior Zbior miejsc DS
	 */
	public Set<MiejsceDs> konwertujDoZbioruDs(SalaDto sala) {

		Set<MiejsceDs> zbiorMiejsc = new HashSet<MiejsceDs>();
		for (int numerRzedu = 0; numerRzedu < sala.getMiejsca().size(); numerRzedu++) {
			List<MiejsceDto> rzad = sala.getMiejsca().get(numerRzedu);
			for (int numerFotela = 0; numerFotela < rzad.size(); numerFotela++) {
				MiejsceDto miejsceDto = rzad.get(numerFotela);
				if (miejsceDto.getTyp() == Miejsce.WOLNE || miejsceDto.getTyp() == Miejsce.ZAJETE) {
					// zapisujemy do bazy tylko wolne i zajety
					MiejsceDs miejsceDs = new MiejsceDs();
					miejsceDs.setId(miejsceDto.getId());
					miejsceDs.setTyp(miejsceDto.getTyp().getTyp());
					miejsceDs.setRzad(numerRzedu + 1);
					miejsceDs.setFotel(numerFotela + 1);
					zbiorMiejsc.add(miejsceDs);
				}
			}
		}

		return zbiorMiejsc;
	}

	/**
	 * Zamienia zbior miejsc DS do sali
	 * 
	 * @param zbiorMiejscDs
	 *            Zbior miejsc DS
	 * @param iloscRzedow
	 *            IloscRzedow w sali
	 * @param iloscMiejsc
	 *            Ilosc miejsc w rzedzie
	 * @return
	 */
	public SalaDto konwertujDoSali(Set<MiejsceDs> zbiorMiejscDs, int iloscRzedow, int iloscMiejsc) {
		SalaDto sala = new SalaDto(iloscRzedow, iloscMiejsc);
		for (MiejsceDs miejsceDs : zbiorMiejscDs) {
			sala.setMiejsce(miejsceAssembler.konwertuj(miejsceDs));
		}

		return sala;
	}
}
